package Z007InterfaceAndExtends.O06Super;
import Z007InterfaceAndExtends.O02DuiXaingZhuanXing.AD;

public class SuperTest {

}

class Hero {

    String name;
    float hp;
    float armor;
    int moveSpeed;

    // 准备显式提供无参构造方法的父类
    // 在实例化Hero对象的时候，其构造方法会打印
    // “Hero的构造方法 "

    public void useItem(Item i) {
        System.out.println("hero use item");
        i.effect();
    }





    public static void main(String[] args) {
        new Hero();
    }

    static class ADHero extends Hero implements AD{

        @Override
        public void physicAttack() {
            System.out.println("进行物理攻击");
        }
        public ADHero(){
            System.out.println("ADHero 的构造方法");
        }
        public ADHero(String name){
            super(name);
            System.out.println("AD Hero 的构造方法！");
        }
        public void phsicAttack(){
            System.out.println("进行了物理攻击！");
        }
        public int getMoveSpeed(){
            return this.moveSpeed;
        }
        public int getMoveSpeed2(){
            return super.moveSpeed;
        }



        public static void main(String[] args){
            new ADHero();
            // 实例化一个ADHero(), 其构造方法会被调用
            // 其父类的构造方法也会被调用
            // 并且是父类构造方法先调用
            // 子类构造方法会默认调用父类的 无参的构造方法

            new ADHero("德莱文");
            // 调用 子类的构造方法
            ADHero h = new ADHero();
            System.out.println(h.getMoveSpeed());
            System.out.println(h.getMoveSpeed2());
        }
    }

    public Hero() {
        System.out.println("Hero 的 构造方法");

    }

    public Hero(String name){
        System.out.println("Hero 有一个参数的构造方法！");
        this.name = name;
    }



    class Item {
        String name;
        int price;

        public void buy() {
            System.out.println("购买");
        }

        public void effect() {
            System.out.println("物品使用效果");
        }
    }

}

class ADHero2 extends Hero implements AD{

    @Override
    public void physicAttack() {
        System.out.println("进行物理攻击！");
    }

    public int getMoveSpeed(){
        return this.moveSpeed;
    }
    public int getMoveSpeed2(){
        return super.moveSpeed;
    }
    public void useItem(Item i) {
        System.out.println("adhero use item");
        super.useItem(i);
    }

    public static void main(String[] args){
        ADHero2 h = new ADHero2();
        LifePotion lp = new LifePotion();
    }


    }

class LifePotion {
    public LifePotion(){}

    public void effect(){
        System.out.println("血瓶使用后，可以恢复血量");
    }
}

//  父类Hero提供了一个有参的构造方法:
//  public Hero(String name){
//    this.name = name;
//  }
//
//
//  但是没有提供无参的构造方法
//  子类应该怎么处理？
//  package charactor;
//
//  public class Hero {
//      public String name;
//      protected float hp;
//
//      public Hero(String name){
//          this.name = name;
//      }
//
//        故意不提供无参的构造方法
//        public Hero(){
//
//        }
//
//      public static void main(String[] args) {
//
//      }
//
//  }